Programmeren 4
Home

Programmeren 4

Logo Fric-frac project in PHP
Het Fric-frac project
PDO en sessions

Programmeren 4

Het Fric-frac project: eerste realisatie PDO en sessions

Doelstelling

  1. leren werken met klassen in het algemeen in PHP
  2. leren werken met de PDO klasse
  3. een voorbeeld omzetten naar een nieuwe opdracht
  4. leren werken met sessies:
    1. Staatloos (stateless) betekent dat HTTP geen ingebouwde ondersteuning voor staten (actuele toestand) heeft. Je kan bijvoorbeeld niet opslaan als een gebruiker zich heeft aangemeld of iets anders heeft gedaan.
    2. De meest gebruikelijke oplossing is om sessies te gebruiken. Dit betekent dat voor in elke interactie of aanvraag een sessie-id moet opnemen. Dit wordt gedaan door een sessiecookie te maken of door de sessie-ID in alle links op te nemen.

Stappenplan

  1. Je herneemt Fric-frac Logisch model.
  2. Hoe je de opdracht moet realiseren vind je op:
    1. Tania Rascia, Create a Simple CRUD Database App: Connecting to MySQL with PHP (Part 1: Create, Read), May 15, 2017
    2. Tania Rascia, Create a Simple CRUD Database App: Connecting to MySQL with PHP (Part 2: Update, Delete), April 22, 2018
  3. PHP Cookies
  4. PHP Sessions
  5. PHP Cookies and Sessions

Opdracht

  1. Voor de eerste realisatie volgen we nog niet de wireframes van Programmeren 4 Het Fric-frac project - Analyse. We houden het bij de simpele lay-out van Tania Rascia. Het realiseren van de wireframes is voor een volgende les. Nu leren we werken met PDO en sessions.
  2. Maak de index.php pagina voor Fric-frac voor de volgende entiteiten (de pagina hoeft niet opgemaakt te worden, CSS is optioneel):
    1. EventCategory
    2. EventTopic
    3. Event
  3. Op de index.php zet je links naar CRUD operaties voor deze drie entiteiten. Gebruik hiervoor bv. een geneste lijst:
    <ol>
        <li>
            <li>Event topic
        <ul>
            <li><a href="eventtopic/create.php"><strong>Create</strong></a> voeg een topic toe</li>
            <li><a href="eventtopic/read.php"><strong>Read</strong></a> - zoek een topic</li>
            <li><a href="eventtopic/update.php"><strong>Update</strong></a> - wijzig een topic</li>
            <li><a href="eventtopic/delete.php"><strong>Delete</strong></a> - delete een topic</li>
        </ul>
        </li>
        <li>Event Cateogry
        ...
        ...
        </li>
    </ol>
  4. Maak voor elk van deze drie entiteiten een submap met de naam van de entiteit met daarin de volgende pagina's.
    1. eventtopic/create.php, eventcategory/create.php, event/create.php
    2. eventtopic/read.php, eventcategory/read.php, event/read.php
    3. eventtopic/delete.php, eventcategory/delete.php, event/delete.php
    4. eventtopic/update.php, eventcategory/update.php, event/update.php
    5. eventtopic/update-single.php, eventcategory/update-single.php, event/update-single.php
  5. De entiteit Event bevat foreignkeys. Je zal een read query moeten schrijven om alle categorieën en topics op te halen. Je gebruikt die lijst om een keuzelijkst (het select html element) te vullen.
  6. Als je een event toont op het scherm moet je niet de foreignkey zelf tonen maar de naam die er mee overeenkomt. De waarde van de foreignkey zet je in het value attribuut van het option element:
    <label for="EventTopicId">Event topic</label>
    <select id="EventTopicId" name="EventTopicId" readonly>
        <!-- option elementen -->
        <?php
        if ($topicList) {
            foreach ($topicList as $row) {
        ?>
        <option value="<?php echo $row['Id'];?>"
            <?php echo $result['Id'] === $row['Id'] ? 'SELECTED' : '';?>>
            <?php echo $row['Name'];?>
        </option>
        <?php
            }
        }
        ?>
    </select>
    
    1. $result bevat de ingelezen rij uit de Event tabel
    2. $topicList is een array met alle rijen uit de EventTopic tabel:
      try {
        $connection = new PDO($dsn, $username, $password, $options);
        $sql = "SELECT * FROM EventCategory";
        $statement = $connection->prepare($sql);
        $statement->execute();
        $topicList = $statement->fetchAll();
      } catch(PDOException $error) {
        echo $sql . "<br>" . $error->getMessage();
      }
      ?>
    3. $row['Id'] ? 'SELECTED' : ''; dit is de ternary operator
  7. Voeg CSRF beveiliging toe.

JI
2019-03-25 19:20:05